activiti-5.x-user-guide

JNDI Datasource Configuration 数据源配置

默认,Activiti 的数据库配置会放在 web 应用的 WEB-INF/classes 目录下的 db.properties 文件中。 这样做比较繁琐, 因为要用户在每次发布时,都修改 Activiti 源码中的 db.properties 并重新编译 war 文件, 或者解压缩 war 文件,修改其中的 db.properties。

使用 JNDI(Java Naming and Directory Interface - Java 命名和目录接口)来获取数据库连接, 连接是由 Servlet 容器管理的,可以 在 war 部署外边管理配置。 与 db.properties 相比, 它也允许对连接进行更多的配置。

Usage 使用

要想把 Activiti Explorer 和 Activiti Rest 应用从db.properties 转换为使用 JNDI 数据库配 置,需要打开原始的 Spring 配置文件 (activiti-webapp-explorer2/src/main/webapp/WEBINF/activiti-standalone-context.xml 和activiti-webapp-rest2/src/main/resources/ activiti-context.xml), 删除"dbProperties"和"dataSource"两个bean,然后添加如下 bean:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">    
<property name="jndiName" value="java:comp/env/jdbc/activitiDB"/>
</bean>

接下来,我们需要添加包含了默认的 H2 配置的 context.xml 文件。 如果已经有了 JNDI 配置, 会覆盖这些配置。 对 Activiti Explorer 来说,对应的配置文件 activiti-webapp-explorer2/src/main/webapp/META-INF/context.xml 如下所示:

<Context antiJARLocking="true" path="/activiti-explorer2">
    <Resource auth="Container"
              name="jdbc/activitiDB"
              type="javax.sql.DataSource"
              scope="Shareable"
              description="JDBC DataSource"
              url="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000"
              driverClassName="org.h2.Driver"
              username="sa"
              password=""
              defaultAutoCommit="false"
              initialSize="5"
              maxWait="5000"
              maxActive="120"
              maxIdle="5"/>
</Context>

对于 Activiti REST web 应用,添加的 activiti-webapp-rest2/src/main/webapp/META-INF/context.xml 如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/activiti-rest2">
    <Resource auth="Container"
              name="jdbc/activitiDB"
              type="javax.sql.DataSource"
              scope="Shareable"
              description="JDBC DataSource"
              url="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=-1"
              driverClassName="org.h2.Driver"
              username="sa"
              password=""
              defaultAutoCommit="false"
              initialSize="5"
              maxWait="5000"
              maxActive="120"
              maxIdle="5"/>
</Context>

可选的一步,现在可以删除 Activiti Explorer 和 Activiti REST 两个应用中 不再使用的 db.properties 文件了。

Configuration 配置

JNDI 数据库配置会因为你使用的 Servlet 容器 不同而不同。 下面的配置可以在 Tomcat 中使用,但是对其他容器,请引用你使用的容器的文档。

如果使用 Tomcat,JNDI资源配置在 $CATALINA_BASE/conf/[enginename]/[hostname]/[warname].xml (对于 Activiti Explorer 来说,通常是在 $CATALINA_BASE/conf/ Catalina/localhost/activiti-explorer.war)。 当应用第一次发布时,会把这个文件从 war 中复制出来。 所以如果这个文件已经存在了,你需要替换它。要想修改 JNDI 资源让应用连接 mysql 而不是 H2,可以像下面这样修改:

<?xml version="1.0" encoding="UTF-8"?>
    <Context antiJARLocking="true" path="/activiti-explorer2">
        <Resource auth="Container"
            name="jdbc/activitiDB"
            type="javax.sql.DataSource"
            description="JDBC DataSource"
            url="jdbc:mysql://localhost:3306/activiti"
            driverClassName="com.mysql.jdbc.Driver"
            username="sa"
            password=""
            defaultAutoCommit="false"
            initialSize="5"
            maxWait="5000"
            maxActive="120"
            maxIdle="5"/>
        </Context>